﻿<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:html="http://www.w3.org/1999/xhtml"
            xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
             xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:xse="http://schemas.microsoft.com/wix/2005/XmlSchemaExtension"
      targetNamespace="http://schemas.microsoft.com/wix/DifxAppExtension"
                xmlns="http://schemas.microsoft.com/wix/DifxAppExtension">
    <xs:annotation>
        <xs:documentation>
            Copyright (c) Microsoft Corporation.  All rights reserved.
            
            The use and distribution terms for this software are covered by the
            Common Public License 1.0 (http://opensource.org/licenses/cpl.php)
            which can be found in the file CPL.TXT at the root of this distribution.
            By using this software in any fashion, you are agreeing to be bound by
            the terms of this license.
            
            You must not remove this notice, or any other, from this software.

            The source code schema for the Windows Installer XML Toolset Driver Install Frameworks for Applications Extension.
        </xs:documentation>
    </xs:annotation>

    <xs:import namespace="http://schemas.microsoft.com/wix/2006/wi" />

    <xs:element name="Driver">
        <xs:annotation>
            <xs:appinfo>
                <xse:parent namespace="http://schemas.microsoft.com/wix/2006/wi" ref="Component" />
            </xs:appinfo>
            <xs:documentation>
                Installs a driver. To use this element, you need to reference the WixDifxAppExtension extension and add the 
                .wixlib appropriate for the target platform (difxapp_x86.wixlib, difxapp_x64.wixlib, or difxapp_ia64.wixlib) 
                to your project.
            </xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="AddRemovePrograms" type="YesNoType">
                <xs:annotation>
                    <xs:documentation>
                        Specifies that the DIFxApp CustomActions should add an entry in the Add/Remove Programs Control
                        Panel applet.  The default is 'yes'.
                    </xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="DeleteFiles" type="YesNoType">
                <xs:annotation>
                    <xs:documentation>
                        If set to "yes", configures DIFxApp to delete binary files that were copied to the system from the driver
                        store when a driver package was installed. If this attribute is set to "no" or not present, DIFxApp does not
                        remove these files from a system. Note that configuring DIFxApp to delete these files is controlled by the
                        Flags entry value of the component that represents the driver package in the MsiDriverPackages custom table.
                        Setting DriverDeleteFiles to "yes" sets the corresponding bit in the Flags entry value. Setting DriverLegacy
                        to "no" clears the corresponding bit in the Flags entry value. If this attribute is not present, DIFxApp uses
                        a default value of "no".
                    </xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="ForceInstall" type="YesNoType">
                <xs:annotation>
                    <xs:documentation>
                        Specifies that the DIFxApp CustomActions should force the installation of a new Plug and Play driver
                        on a device, even if the currently installed driver on the device is a better match than the new driver.
                        Specifying 'no' is an excellent way to ensure the DIFxApp CustomActions recognize the Component contains
                        a driver for installation.  The default is null which means the Component does not install a driver via
                        DIFxApp CustomActions. See <html:a href='http://www.microsoft.com/whdc/driver/install/difxtools.mspx'>http://www.microsoft.com/whdc/driver/install/difxtools.mspx</html:a>
                        for more information.
                    </xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="Legacy" type="YesNoType">
                <xs:annotation>
                    <xs:documentation>
                        If set to "yes", configures DIFxApp to install unsigned driver packages and driver packages with missing
                        files. For more information, see "Installing Unsigned Driver Packages in Legacy Mode" earlier in this paper.
                        If this attribute is set to "no" or not present, DIFxApp will install only signed driver packages. Note
                        that configuring DIFxApp to install unsigned drivers is controlled by the Flags entry value of the component
                        that represents the driver package in the MsiDriverPackages custom table. Setting DriverLegacy to "yes" sets
                        the corresponding bit in the Flags entry value. Setting DriverLegacy to "no" clears the bit in the Flags
                        entry value that configures DIFxApp to install unsigned driver packages. If this attribute is not present,
                        DIFxApp uses a default value of "no".
                    </xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="PlugAndPlayPrompt" type="YesNoType">
                <xs:annotation>
                    <xs:documentation>
                        Specifies that the DIFxApp CustomActions should prompt the user to connect the Plug and Play
                        device if it is not connected.  The default is 'yes'.
                    </xs:documentation>
                </xs:annotation>
            </xs:attribute>
            <xs:attribute name="Sequence" type="xs:integer">
                <xs:annotation>
                    <xs:documentation>
                        Specifies an optional installation sequence number. DIFxApp CustomActions install the driver packages in
                        an installation package in the order of increasing sequence numbers. The same sequence number can be used
                        for more than one driver; however, the order in which packages with the same sequence number are actually
                        installed cannot be determined.
                    </xs:documentation>
                </xs:annotation>
            </xs:attribute>
        </xs:complexType>
    </xs:element>

    <xs:simpleType name="YesNoType">
        <xs:annotation>
            <xs:documentation>Values of this type will either be "yes" or "no".</xs:documentation>
        </xs:annotation>
        <xs:restriction base='xs:NMTOKEN'>
            <xs:enumeration value="no"/>
            <xs:enumeration value="yes"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
